home *** CD-ROM | disk | FTP | other *** search
/ LOGIC Apps / Logic-APPLE_II_APPS.iso / pc / LOGIC Apple II 5.25" Library - DOS Part 3 / DOS069.dsk / WORD MAZE MAKER.bas < prev   
BASIC Source File  |  2012-02-16  |  6KB  |  152 lines

  1. 5  TEXT : HOME : VTAB 10
  2. 20  PRINT  TAB( 12);"CREATIVE COMPUTING"
  3. 30  PRINT  TAB( 10);"MORRISTOWN, NEW JERSEY"
  4. 40  FOR ZZ = 1 TO 3000: NEXT ZZ
  5. 41  GOSUB 2000
  6. 45  HOME : VTAB 5
  7. 50  PRINT "  THIS PROGRAM IS A WORD SEARCH"
  8. 55  PRINT "GENERATOR!  THE PROGRAM TAKES A"
  9. 60  PRINT "SET OF INPUT STRINGS, PURGES ALL"
  10. 65  PRINT "NON-ALPHABETIC CHARACTERS OUT OF"
  11. 70  PRINT "THEM, AND INCORPORATES THEM INTO"
  12. 75  PRINT "A WORD SEARCH PUZZLE."
  13. 80  PRINT 
  14. 85  PRINT "  IN THE COURSE OF MAKING THE"
  15. 90  PRINT "PUZZLE, THE MACHINE MAY FIND"
  16. 95  PRINT "THAT IT CAN'T PUT A PARTICULAR"
  17. 100  PRINT "WORD ANYWHERE, AND SO WILL ASK"
  18. 105  PRINT "YOU IF IT SHOULD START THE WHOLE"
  19. 110  PRINT "OVER.  IF YOU DON'T WANT IT TO"
  20. 115  PRINT "START OVER, TYPING 'NO' WILL "
  21. 120  PRINT "THROW AWAY THAT PARTICULAR WORD."
  22. 125  PRINT "IF THIS PERSISTS, TRY EITHER "
  23. 130  PRINT "GIVING LESS WORDS OR BIGGER"
  24. 135  PRINT "PUZZLE DIMENSIONS!"
  25. 140  PRINT : PRINT 
  26. 150  INPUT "HIT RETURN WHEN READY TO CONTINUE ";GO$
  27. 160  HOME : PRINT : PRINT 
  28. 300  DEF  FN A(Z) =  INT( RND(1) *Z +1)
  29. 310  INPUT "HOW MANY COLUMNS DOES YOUR PRINTER      HAVE ";TW
  30. 315  PRINT : INPUT "DO YOU WANT A SOLUTION PRINTOUT ";X$
  31. 330  PRINT : INPUT "WHAT IS TO BE THE WIDTH OF THE PUZZLE ";W:MD = W
  32. 340  IF W *2 < = TW  THEN 345
  33. 343  PRINT : PRINT "THAT WILL NOT FIT IN ";TW;" COLUMNS.": GOTO 330
  34. 345  IF W <1  THEN 330
  35. 350  PRINT : INPUT "THE LENGTH ";L: IF L >W  THEN MD = L
  36. 355  IF L <1  THEN 350
  37. 360  PRINT : INPUT "WHAT IS THE NUMBER OF WORDS IN THE      PUZZLE ";M
  38. 370  IF M > = 2  THEN 380
  39. 375  PRINT : PRINT "SORRY, THERE MUST BE  AT LEAST TWO      WORDS."
  40. 376  GOTO 360
  41. 380  PRINT 
  42. 390  DIM A$(L,W),W$(M)
  43. 400  DIM W(M,3),DXY(8,2),DD(28)
  44. 410  PRINT : PRINT "NOW ENTER A HEADING THAT WILL BE        PRINTED OVER THE PUZZLE:"
  45. 420  PRINT "( ";TW;" CHARACTERS MAXIMUM!)"
  46. 430  INPUT XY$
  47. 440  PRINT : PRINT "OK....ENTER A WORD AT EACH QUESTION     MARK.  TO REDO THE PREVIOUS WORD, TYPE  A HYPHEN (-).  WHEN YOU RUN OUT OF      WORDS, TYPE A PERIOD (.)."
  48. 470  FOR I = 1 TO M
  49. 480  PRINT : INPUT T$
  50. 485  IF T$ = "-"  THEN I = I -1: PRINT : PRINT "REDO ";W$(I);" . . .": GOTO 480
  51. 490  IF T$ = "."  THEN M = I -1: GOTO 655
  52. 500  IF  LEN(T$) = 0  THEN  PRINT "INPUT ERROR; REDO:": GOTO 480
  53. 510 J = 1
  54. 520 TE$ =  MID$ (T$,J,1): IF TE$ > = "A"  AND TE$ < = "Z"  THEN 570
  55. 530  IF TE$ = T$  THEN T$ = "": GOTO 500
  56. 540  IF J =  LEN(T$)  THEN T$ =  LEFT$(T$,J -1): GOTO 580
  57. 550  IF J = 1  THEN T$ =  RIGHT$(T$, LEN(T$) -1):J = J -1: GOTO 570
  58. 560 T$ =  LEFT$(T$,J -1) + RIGHT$(T$, LEN(T$) -J):J = J -1
  59. 570 J = J +1: IF J < =  LEN(T$)  THEN 520
  60. 580  PRINT : PRINT "- ";T$;" -"
  61. 600  IF  LEN(T$) < = MD  THEN 610
  62. 605  PRINT : PRINT "THAT'S TOO LONG, I'M AFRAID."
  63. 607  PRINT "TRY ANOTHER ONE : ": GOTO 480
  64. 610  FOR IZ = 1 TO I -1: IF W$(IZ) < >T$  THEN  NEXT : GOTO 630
  65. 620  PRINT : PRINT "YOU ENTERED THAT ONE ALREADY.  TRY      ANOTHER ONE : ": GOTO 480
  66. 630 W$(I) = T$
  67. 640  NEXT I
  68. 650  PRINT : PRINT "THAT'S IT... ";M;" WORDS."
  69. 655  FOR ZZ = 1 TO 3000: NEXT ZZ: HOME : VTAB 12: HTAB 6: PRINT "NOW LET ME PONDER THIS......"
  70. 680  FOR I = 1 TO M -1
  71. 685  FOR J = I +1 TO M
  72. 690  IF  LEN(W$(I)) < LEN(W$(J))  THEN HZ$ = W$(I):W$(I) = W$(J):W$(J) = HZ$
  73. 700  NEXT J: NEXT I
  74. 710  FOR I = 1 TO 8: READ DXY(I,1),DXY(I,2): NEXT I
  75. 720  FOR I = 1 TO 28: READ DD(I): NEXT I
  76. 730  DATA 0,1,1,1,1,0,1,-1,0,-1,-1,-1,-1,0,-1,1
  77. 740  DATA 2,4,6,8,2,4,6,8,2,4,6,8,2,4,6,8,2,4,6,8,2,4,6,8,1,3,5,7
  78. 750  FOR I = 1 TO M
  79. 760 LN =  LEN(W$(I))
  80. 770 NT = 0
  81. 790 SD = DD( FN A(28))
  82. 800 SX =  FN A(W):X1 = SX +(LN -1) *DXY(SD,1)
  83. 801  IF X1 <1  OR X1 >W  THEN 790
  84. 810 SY =  FN A(L):X1 = SY +(LN -1) *DXY(SD,2)
  85. 811  IF X1 <1  OR X1 >L  THEN 790
  86. 820 NT = NT +1
  87. 825  IF NT < >W *L *2  THEN 850
  88. 830  PRINT : PRINT "I COULDN'T FIT '";W$(I);"' IN THE": PRINT "PUZZLE"
  89. 832  PRINT : INPUT "DO YOU WANT ME TO START OVER ";A$
  90. 834  IF  LEFT$(A$,1) = "Y"  THEN 750
  91. 836 W$(I) = "": GOTO 950
  92. 850 J = SY:K = SX
  93. 860  FOR P = 1 TO LN
  94. 870  IF  LEN(A$(J,K))  AND A$(J,K) < > MID$ (W$(I),P,1)  THEN 790
  95. 880 J = J +DXY(SD,2):K = K +DXY(SD,1): NEXT P
  96. 900 J = SY:K = SX
  97. 910  FOR P = 1 TO LN:A$(J,K) =  MID$ (W$(I),P,1)
  98. 920 J = J +DXY(SD,2):K = K +DXY(SD,1): NEXT P
  99. 940 W(I,1) = SX:W(I,2) = SY:W(I,3) = SD
  100. 950  NEXT I
  101. 970  FOR I = 1 TO L
  102. 975  FOR J = 1 TO W
  103. 980  IF A$(I,J) = ""  THEN A$(I,J) =  CHR$( FN A(26) +65)
  104. 990  NEXT J: NEXT I
  105. 1010  FOR I = 1 TO M -1: FOR J = I +1 TO M
  106. 1020  IF W$(I) < = W$(J)  THEN 1030
  107. 1021 HZ$ = W$(I):W$(I) = W$(J):W$(J) = HZ$
  108. 1025  FOR K = 1 TO 3:HZ = W(I,K):W(I,K) = W(J,K):W(J,K) = HZ: NEXT K
  109. 1030  NEXT J: NEXT I
  110. 1040  PRINT : INPUT "HOW MANY COPIES OF THIS PUZZLE DO YOU   WANT ";N
  111. 1050  PRINT : PRINT "FOR EACH COPY, HIT RETURN TO BEGIN      PRINTING..."
  112. 1060  FOR C = 1 TO N: GOSUB 1070: NEXT C: GOTO 1230
  113. 1070  PRINT : INPUT A$: PRINT 
  114. 1080 T = (TW -2 *W)/2: PRINT 
  115. 1090  PRINT 
  116. 1100  PRINT  TAB( (TW - LEN(XY$))/2);XY$
  117. 1110  PRINT : PRINT 
  118. 1120  FOR J = 1 TO L: PRINT  TAB( T);
  119. 1130  FOR K = 1 TO W: IF A$(J,K) = "."  THEN  PRINT ". ";: GOTO 1140
  120. 1135  PRINT A$(J,K);" ";
  121. 1140  NEXT K: PRINT : NEXT J
  122. 1150  PRINT : PRINT 
  123. 1160  PRINT "FIND THESE WORDS IN THE ABOVE PUZZLE :"
  124. 1170  PRINT 
  125. 1180  FOR J = 1 TO M: IF  LEN(W$(J)) = 0  THEN 1210
  126. 1190  IF  POS(0) + LEN(W$(J)) >TW -2  THEN  PRINT 
  127. 1200  PRINT W$(J),
  128. 1210  NEXT J: PRINT 
  129. 1220  RETURN 
  130. 1230  IF  LEFT$(X$,1) = "Y"  THEN 1250
  131. 1240  END 
  132. 1250  REM 
  133. 1260  FOR I = 1 TO L: FOR J = 1 TO W:A$(I,J) = ".": NEXT J: NEXT I
  134. 1270  FOR I = 1 TO M
  135. 1280 LN =  LEN(W$(I)):J = W(I,2):K = W(I,1)
  136. 1290  FOR P = 1 TO LN
  137. 1300 A$(J,K) =  MID$ (W$(I),P,1)
  138. 1310 J = J +DXY(W(I,3),2):K = K +DXY(W(I,3),1): NEXT P
  139. 1320  NEXT I
  140. 1330 XY$ = "HERE IS THE ANSWER KEY:"
  141. 1340  GOSUB 1070
  142. 1360  END 
  143. 2000  HOME : VTAB 7
  144. 2010  PRINT  TAB( 12);"ADAPTED FOR APPLE"
  145. 2020  PRINT  TAB( 19);"BY"
  146. 2030  PRINT  TAB( 12);"GEORGE B. HILBERT"
  147. 2040  PRINT  TAB( 12);"8314 LARKDALE AVE"
  148. 2050  PRINT  TAB( 13);"SAN DIEGO, CAL"
  149. 2060  PRINT  TAB( 24);"92123"
  150. 2070  PRINT : PRINT  TAB( 14);"714-279-0345"
  151. 2080  FOR ZZ = 1 TO 3000: NEXT ZZ
  152. 2090  RETURN